package com.atguigu.gmall.all.controller;

import com.atguigu.gmall.result.Result;
import com.atguigu.gmall.product.client.ProductFeignClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;

import java.io.FileWriter;
import java.io.IOException;

@Controller
@SuppressWarnings("all")
public class IndexController {

    @Autowired
    private ProductFeignClient productFeignClient;

    @Autowired
    private TemplateEngine templateEngine;

    /**
     * 第一种方式：页面模版渲染
     * @return
     */
    @GetMapping({"/","index.html"})
    public String index(Model model) {
        // 远程获取三级分类的数据
        Result result = productFeignClient.getBaseCategoryList();

        // 远程请求广告（自己添加）

        // 设置数据
        model.addAttribute("list",result.getData());
        return "index/index";
    }

    /**
     * 第二种方式：生成页面-nginx做静态代理
     * nginx：
     *    反向代理
     *    负载均衡
     *    动静分离
     * @return
     */
    @GetMapping("createIndex")
    @ResponseBody
    public Result createIndex() {
        // 远程获取三级分类的数据
        Result result = productFeignClient.getBaseCategoryList();

        // 创建对象封装数据
        // IContext: org.thymeleaf.context
        Context context = new Context();
        // 设置数据
        context.setVariable("list",result.getData());

        // 声明输出位置
        FileWriter fileWriter = null;
        try {
            // win
            // fileWriter = new FileWriter("F:\\Java-20230128\\08-尚品汇项目【完结】\\220106Java\\gmall-parent\\aaa\\index.html");
            // mac
            fileWriter = new FileWriter("/Users/mac/Documents/Java-20230128/08-尚品汇项目【完结】/220106Java/gmall-parent/aaa/index.html");
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 生成页面
        /**
         * 参数1：模版的位置，使用哪个模版
         * 参数2：数据，上下文对象
         * 参数3：生成页面的位置，流对象
         */
        templateEngine.process("index/index.html",context,fileWriter);
        return Result.ok();
    }
}
